package com.relytosoft.mizar.media.analyze.services.service.structure;

import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.service.IService;
import com.relytosoft.dubhe.common.core.base.page.PageQuery;
import com.relytosoft.mizar.media.analyze.api.entity.structure.AyStructureTaskSon;
import com.relytosoft.mizar.media.analyze.api.pojo.dto.AyStructureTaskSonDto;
import com.relytosoft.mizar.media.analyze.api.pojo.query.AyStructureTaskSonQuery;
import com.relytosoft.mizar.media.analyze.api.pojo.vo.AyBatchVo;
import com.relytosoft.mizar.media.analyze.api.pojo.vo.AyStructureTaskSonVo;

import java.util.List;

/**
 * AyStructureTaskSonService
 *
 * @Author SunLi
 * @Date: 2022/5/31 16:46
 * @Version 1.0
 */
public interface AyStructureTaskSonService extends IService<AyStructureTaskSon> {
    /**
     * 分页查询
     * @param pageQuery
     * @param ayStructureTaskSonQuery
     * @return
     */
    IPage<AyStructureTaskSonVo> selectAyStructureTaskSonPageList(PageQuery pageQuery, AyStructureTaskSonQuery ayStructureTaskSonQuery);

    /**
     * 添加子任务/添加通道
     *
     * @param ayStructureTaskSonDto
     * @param taskName
     */
    AyBatchVo insertAyStructureTaskSon(AyStructureTaskSonDto ayStructureTaskSonDto,String taskName);

    /**
     * 删除子任务
     * @param ids
     * @return
     */
    boolean deleteAyStructureTaskSon(List<Integer> ids);

    /**
     * 获取可启动的子任务
     * @param ids
     * @param structureTaskId
     * @return
     */
    List<AyStructureTaskSon> selectCanStartTaskSonList(List<Integer> ids,Integer structureTaskId);

    /**
     * 获取可停止的子任务
     * @param ids
     * @param structureTaskId
     * @return
     */
    List<AyStructureTaskSon> selectCanStopTaskSonList(List<Integer> ids,Integer structureTaskId);
    /**
     * 删除并启动结构化子任务
     */
    boolean deleteAndStartTaskSonList(List<AyStructureTaskSon> deleteSonList,List<AyStructureTaskSon> insertSonList,Integer structureTaskId);

    /**
     * 启动结构化子任务
     */
    boolean startTaskSonList(List<AyStructureTaskSon> startSonList,Integer structureTaskId);
    /**
     * 停止结构化子任务
     */
    boolean stopTaskSonList(List<AyStructureTaskSon> stopSonList,Integer structureTaskId);

    /**
     * 根据主任务删除子任务
     * @param ids
     * @return
     */
    boolean deleteByTask(List<Integer> ids);

    /**
     * 发送创建分析任务消息
     * @param ayStructureTaskSon
     */
    void sendInsertTaskMsg(AyStructureTaskSon ayStructureTaskSon);

    /**
     * 发送删除分析任务消息
     * @param taskId
     */
    void sendDeleteTaskMsg(String taskId);

    void buildDeleteAndStartTaskSon(List<AyStructureTaskSon> taskSonList,List<AyStructureTaskSon> deleteTaskSons,List<AyStructureTaskSon> insertTaskSons);

    void buildStartTaskSon(List<AyStructureTaskSon> taskSonList,List<AyStructureTaskSon> startTaskSons);

    void buildStopTaskSon(List<AyStructureTaskSon> taskSonList,List<AyStructureTaskSon> stopTaskSons);

    /**
     * 根据第三方任务ID获取任务信息
     * @param taskId
     * @return
     */
    AyStructureTaskSon getByTaskId(String taskId);

    /**
     * 根据主任务ID获取所有第三方taskId的集合
     * @param structureTaskId
     * @return
     */
    List<String> getTaskIds(Integer structureTaskId);
    /**
     * 根据主任务ID获取指定设备任务的第三方taskId的集合
     * @param structureTaskId
     * @return
     */
    List<String> getTaskIds(Integer structureTaskId,String deviceIds);

    /**
     * 根据设备ID获取所有未删除的运行中的任务设备ID集合
     * @param deviceIds
     * @return
     */
    String[] getRunTaskDeviceIds(String[] deviceIds);

    /**
     * 查询指定任务ID集合中是否有异常任务
     * @param ids
     * @return
     */
    List<AyStructureTaskSon> selectUnusualTaskSons(List<Integer> ids);
}
